home *** CD-ROM | disk | FTP | other *** search
/ Delphi Programmer's Power Pack / Delphi Volume 1.iso / e_to_l / isamexpt / uuseisam.pas < prev    next >
Pascal/Delphi Source File  |  1996-09-15  |  30KB  |  1,128 lines

  1. {$x+}
  2.  
  3. { Useisam.Pas   Rev 01.0 vom  9. Juni   89: Isam 3.0 , Turbo 4.0
  4.                 Rev 02.0 vom 24. April  91: Isam 5.21, Turbo 6.0
  5.                 Rev 03.0 vom 26. Mai    92: Isam 5.3 , Turbo 6.0
  6.                 Rev 04.0 vom  3. Januar 93: Isam 5.4 , BP 7.0
  7.                 Rev 05.0 vom 22. August 95: Filer 5.5, Delphi
  8.                 Rev 06.0 vom 30. MΣrz   96: Filer 5.52,Delphi
  9.  
  10.   Inhalt: Routinen zur Unterstⁿtzung der Netisam
  11. }
  12. unit Uuseisam;
  13.  
  14.  
  15. interface
  16.  
  17.  
  18. USES Filer, UToolDll, isamtool;
  19.  
  20.  
  21.  
  22. procedure DIEE;
  23. Procedure DIE;
  24. function  IA:boolean; {Testet, ob Dialog-Meldung vorliegt und löscht sie}
  25. function NotFound:boolean; {Testet, ob bei letzter Op. "nicht gef." herauskam}
  26.  
  27. const Isamwsnr : Longint = 1;
  28.       MySAVE   : Boolean = FALSE;
  29.  
  30. var
  31.   SatzNoAngel : longint;
  32.   IsamFehler  : Integer Absolute IsamError;
  33.   InitCount   : Integer;
  34.  
  35.  
  36.  
  37.  
  38. type
  39.   KeyProc    = Function ( Var DSatz; KeyNr : Word ) : IsamKeyStr;
  40.   ChangeProc = Function(var DatOld,DatNew;Len:word):boolean;
  41.  
  42.  
  43. Function EXISTIsam(IfbPtr:IsamFileBlockPtr;Name:STring):Boolean;
  44. PROCEDURE EXITIsam;
  45. Function INITIsam(Netz:NetSupportType) : Boolean;
  46.  
  47.  
  48. PROCEDURE CLEARKEY(VAR IFBPtr : ISAMFILEBLOCKPTR;KEY: INTEGER);
  49. {Setzt den Datensatzzeiger auf den 1. Schlüssel von Key
  50.  
  51.   IFBPtr  : Dateivariable
  52.   Key     : Keynummer
  53. }
  54.  
  55. PROCEDURE READLOCK(VAR IFBPtr : ISAMFILEBLOCKPTR);
  56. {Setzt ein READLOCK auf die Datei
  57.  
  58.   IFBPtr  : Dateivariable
  59. }
  60. PROCEDURE LOCK(VAR IFBPtr : ISAMFILEBLOCKPTR);
  61. {Setzt ein LOCK auf die Datei
  62.  
  63.   IFBPtr  : Dateivariable
  64. }
  65. PROCEDURE UNLOCK(VAR IFBPtr : ISAMFILEBLOCKPTR);
  66. {Hebt den READLOCK auf
  67.  
  68.   IFBPtr  : Dateivariable
  69. }
  70.  
  71.  
  72. procedure SatzLesen (Var IFBPtr : IsamFileBlockPtr;RefNr:longint;
  73.                      var Ziel,Dup);
  74. {Liest einen Satz aus der angegebenen Isam-Datei.
  75.  
  76.   IFBPtr  : Dateivariable
  77.   RefNr   : Datensatznummer des zu lesenden Satzes
  78.   Ziel    : Variable, in der der Satz gespeichert werden soll
  79.   Dup     : muß vom selben Typ wie Ziel sein. Wird von den Schreibprozeduren
  80.             verwendet, um festzustellen, ob der Satz inzwischen verändert
  81.             wurde. Darf daher nicht von Hand verändert werden.
  82.  
  83.   Bitte anschließend IsamOK beachten.
  84.   Fehlermöglichkeiten: wie bei GetNetRec.
  85. }
  86.  
  87. procedure SatzAendern(Var IFBPtr:IsamFileBlockPtr;RefNr:longint;
  88.                       Var Quelle,Dup;Keys:KeyProc;var OK:boolean);
  89. {Schreibt einen geänderten Satz zurück in die Isam-Datei.
  90.  
  91.   IFBPtr  : Dateivariable
  92.   RefNr   : Datensatznummer des zurückzuschreibenden Satzes
  93.   Quelle  : zu schreibender Satz
  94.   Dup     : muß das von SatzLesen erzeugte Duplikat des alten Satzes enthalten
  95.   Keys    : Zeiger auf eine Funktion, die die Datensatzschlüssel ermittelt.
  96.             (s. Anmerkungen zu "type KeyProc" weiter oben.)
  97.   OK      : enthält OK nach der Ausführung FALSE, so konnte nicht geschrieben
  98.             werden, weil der Satz inzwischen verändert wurde oder weil das Än-
  99.             dern einen doppelten Hauptschlüssel zur Folge hätte.
  100.  
  101.   Bitte anschließend IsamOk und OK beachten.
  102.   Fehlermöglichkeiten: wie bei LockFileBlock, GetNetRec, PutNetRec,
  103.   DeleteKey, AddKey, UnlockFile sowie siehe OK.
  104.  
  105. }
  106.  
  107. procedure SatzAnlegen(Var IFBPtr:IsamFileBlockPtr;
  108.                      var Quelle;Keys:KeyProc);
  109. {Legt einen Satz an.
  110.  
  111.   IFBPtr  : Dateivariable
  112.   Quelle  : zu schreibender Satz
  113.   Keys    : s. SatzAendern, type KeyProc
  114.  
  115.   Bitte anschließend IsamOK beachten.
  116.   Fehlermöglichkeiten: wie bei LockFileBlock, AddNetRec, AddKey,
  117.   UnlockFile.
  118.  
  119. }
  120.  
  121.  
  122. procedure Satzloeschen(Var IFBPtr:IsamFileBlockPtr;RefNr:longint;
  123.                        var Dup;Keys:KeyProc;var OK:boolean);
  124. {Löscht einen Satz.
  125.  
  126.   IFBPtr  : Dateivariable
  127.   RefNr   : Nummer des zu löschenden Satzes
  128.   Dup     : s. SatzAendern
  129.   Keys    : s. SatzAendern, type KeyProc
  130.   OK      : s. SatzAendern
  131.  
  132.   Bitte anschließend IsamOk beachten.
  133.   Fehlermöglichkeiten: s. SatzAendern
  134. }
  135.  
  136. procedure DateiOeffnen (var IFBPtr:IsamFileBlockPtr;Name:String;Save:boolean;
  137.           RSize:longint);
  138. {Öffnet einen Fileblock.
  139.  
  140.   IFBPtr  : Dateivariable
  141.   Name    : Pfad+Vorname der Datei
  142.   Save    : TRUE, wenn im Savemodus geöffnet werden soll
  143.   RSize   : Datensatzrecordgröße. Dient der Kontrolle, ob Programm- und
  144.             Dateiversion kompatibel sind.
  145.  
  146.   Bitte anschließend IsamOk beachten.
  147.   Fehlermöglichkeiten wie Open(Save)NetFileBlock.
  148. }
  149.  
  150. procedure DateiSchliessen (var IFBPtr:IsamFileBlockPtr);
  151. {Schließt einen Fileblock.
  152.  
  153.   IFBPtr  : Dateivariable
  154.  
  155.   Bitte anschließend IsamOk beachten.
  156.   Fehlermöglichkeiten wie bei CloseNetFileBlock.
  157. }
  158.  
  159. procedure KeySuchen (var IFBPtr:IsamFileBlockPtr;Key:integer;
  160.                      var Userdatref:Longint;var Userkey:IsamKeyStr;
  161.                      var Found:boolean);
  162. {Sucht einen Schlüssel.
  163.  
  164.   IFBPtr  : Dateivariable
  165.   Key     : Schlüsselnummer
  166.   UserdatRef : erhält die Datensatznummer des gefundenen Schlüssels
  167.   UserKey : zu suchender Schlüssel
  168.   Found   : TRUE:  gewünschter Schlüssel wurde gefunden.
  169.             FALSE: gewünschter Schlüssel wurde nicht gefunden, weil
  170.               IsamOK=TRUE:  er nicht existiert. Userkey enthält den nächsten
  171.                             größeren Schlüssel.
  172.               IsamOK=FALSE: der Zugriff wegen eines Fehlers nicht durchge-
  173.                             führt werden konnte.
  174.  
  175.   Bitte anschließend IsamOk beachten.
  176.   Fehlermöglichkeiten wie bei SearchKey.
  177. }
  178.  
  179. procedure RefSuchen (var IFBPtr:IsamFileBlockPtr;Key:integer;
  180.                      var Userdatref:Longint;var Userkey:IsamKeyStr;
  181.                      var Found:boolean);
  182. {Sucht einen Schlüssel mit Referenz.
  183.  
  184.   IFBPtr  : Dateivariable
  185.   Key     : Schlüsselnummer
  186.   UserdatRef : Datensatznummer des zu suchenden Schlüssels
  187.   UserKey : zu suchender Schlüssel
  188.   Found   : TRUE:  gewünschter Schlüssel wurde gefunden.
  189.             FALSE: gewünschter Schlüssel wurde nicht gefunden, weil
  190.               IsamOK=TRUE:  er nicht existiert. Userkey enthält den nächsten
  191.                             größeren Schlüssel.
  192.               IsamOK=FALSE: der Zugriff wegen eines Fehlers nicht durchge-
  193.                             führt werden konnte.
  194.  
  195.   Bitte anschließend IsamOk beachten.
  196. }
  197.  
  198. procedure SatzEinlesen(var IFBPtr:IsamFileBlockPtr;Key:integer;
  199.                        var Satz,Dup;Keys:KeyProc;var Klar:boolean);
  200. {Liest einen Satz ein. Funktionsweise: Die Felder der Variablen "Satz", die
  201.  bekannt sind, müssen vor Aufruf besetzt werden (z.B. das Kundennummernfeld,
  202.  wenn nach einer Kundennummer gesucht werden soll). Diese Prozedur sucht
  203.  dann den passenden Satz und liest ihn ein.
  204.  
  205.    IFBPtr  : Dateivariable
  206.    Key     : Nummer das Schlüssels, anhanddessen gesucht werden soll
  207.    Satz    : s.o., erhält hinterher den kompletten Satz
  208.    Dup     : s. SatzLesen
  209.    Keys    : s. SatzAendern, type KeyProc
  210.    Klar    : TRUE, wenn der Satz gefunden und ordnungsgemäß gelesen wurde
  211.  
  212.    Bitte anschließend IsamOk beachten.
  213.    Fehlermöglichkeiten wie bei SearchKey, GetNetRec.
  214.  }
  215.  
  216. const
  217.   FindFirst  = 0;
  218.   FindLast   = 1;
  219.   FindNext   = 2;
  220.   FindPrev   = 3;
  221.   FindALL    = 4;
  222.  
  223. procedure NachbarKey(var IFBPtr:IsamFileBlockPtr;Key:integer;
  224.                      var UserDatRef:longint;var UserKey:IsamKeyStr;
  225.                      SuchArt:byte);
  226. {Sucht den nächsten bzw. vorigen Schlüssel.
  227.  
  228.   IFBPtr  : Dateivariable
  229.   Key     : Schlüsselnummer
  230.   UserDatRef : erhält die Datensatznummer des gefundenen Schlüssels
  231.   UserKey : erhält den gefundenen Schlüssel
  232.   SuchArt : 0=der erste Schlüssel wird gesucht
  233.             1=der letzte Schlüssel wird gesucht
  234.             2=der nächste Schlüssel wird gesucht
  235.             3=der vorige   Schlüssel wird gesucht
  236.             4=der erste übereinstimmende Schlüssel (FINDKEY) wird gesucht
  237.  
  238.   Bitte anschließend IsamOk beachten.
  239.   Fehlermöglichkeiten wie bei NextKey, PrevKey, ClearKey.
  240. }
  241.  
  242.  
  243. procedure DeleteAllRecs(var IFBPtr    : IsamFileBlockPtr;
  244.                             VonKey,
  245.                             BisKey    : IsamKeyStr;
  246.                             Key       : integer;
  247.